{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEWCAYAAACKSkfIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xd4HNXZ///3vauy6t2yLNmWG27gAgZsDInBVEOABAKmBQKE55dCAkmeBFJJwi/tIaRSQifUOBDAAYMpwTQbcO+9SrbVe99yvn+csbyS1YwlrbR7v67Ll3ZnZ2fvHXk/e3TmzBkxxqCUUioyuEJdgFJKqf6joa+UUhFEQ18ppSKIhr5SSkUQDX2llIogGvpKKRVBNPSVUiqCaOirsCEiS0SkUkRiQ12LUgOVhr4KCyKSD5wBGODifnzdqP56LaV6g4a+ChdfAT4GngCuP7RQROJE5A8isldEqkXkQxGJcx47XUSWikiViBSIyA3O8iUicnPQNm4QkQ+D7hsR+aaIbAe2O8v+7GyjRkRWisgZQeu7ReRHIrJTRGqdx4eLyH0i8ofgNyEi/xGR2/piBykFGvoqfHwFeMb5d56IZDvL7wFOAk4D0oEfAAERGQG8DvwVyAKmAWuO4vUuBU4FJjn3lzvbSAeeBf4lIh7nse8CVwHzgGTgRqABeBK4SkRcACKSCcwFnjuaN67U0dDQV4OeiJwOjAQWGGNWAjuBq50wvRH4jjFmvzHGb4xZaoxpBq4B3jbGPGeM8Rpjyo0xRxP6vzHGVBhjGgGMMU872/AZY/4AxALjnXVvBn5ijNlqrLXOup8C1digB5gPLDHGFB/jLlGqUxr6KhxcD7xpjClz7j/rLMsEPNgvgfaGd7K8pwqC74jI90Rks9OFVAWkOK/f3Ws9CVzr3L4WeOoYalKqW3oQSg1qTv/8FYBbRIqcxbFAKpADNAFjgLXtnloAnNLJZuuB+KD7QztYp3V6Wqf//ofYFvtGY0xARCoBCXqtMcCGDrbzNLBBRKYCE4GXO6lJqV6hLX012F0K+LF969OcfxOBD7D9/I8B94rIMOeA6ixnSOczwNkicoWIRIlIhohMc7a5BviSiMSLyFjgpm5qSAJ8QCkQJSI/w/bdH/II8CsRGSfWFBHJADDGFGKPBzwFvHiou0ipvqKhrwa764HHjTH7jDFFh/4Bf8P2298BrMcGawXwO8BljNmHPbD6PWf5GmCqs80/Ai1AMbb75ZlualiMPSi8DdiL/esiuPvnXmAB8CZQAzwKxAU9/iRwAtq1o/qB6EVUlAotEfkctpsn3xgTCHU9KrxpS1+pEBKRaOA7wCMa+Ko/aOgrFSIiMhGowh5w/lOIy1ERQrt3lFIqgmhLXymlIsiAG6efmZlp8vPzQ12GUkoNKitXriwzxmR1t96AC/38/HxWrFgR6jKUUmpQEZG9PVlPu3eUUiqCaOgrpVQE0dBXSqkIMuD69Dvi9XopLCykqakp1KX0OY/HQ15eHtHR0aEuRSkVhgZF6BcWFpKUlER+fj4i0v0TBiljDOXl5RQWFjJq1KhQl6OUCkODonunqamJjIyMsA58ABEhIyMjIv6iUUqFxqAIfSDsA/+QSHmfSqnQGDShr5RSg13wtDdbi2pZta8SYwxef4DnP93HGxuKunh27xgUffoDQVVVFc8++yzf+MY3jup58+bN49lnnyU1NbWPKlNKhdqWohqSPNHkJHtYsbeSj3eV87njspgwNInHPtrNS6v2U1TTRCBgOHlUOi2+AEt3lgMweVgydc0+9pY38IWpwzj/+I4u1NZ7NPR7qKqqivvvv/+I0Pf7/bjd7k6ft2jRor4uTSl1jHz+AAerm0iOiyY2ysW+igZcAmOHJLW2wneW1pOXFkdpXTOr9lYyOjOR62aN5Mmle/jXykIA4mPcNLT4Abj3rW2t92eNzmD22Ex8gQDLdpbT4g9wxwUTSPZE89THe0mNi+Zn18/grAlD+vy9auj30B133MHOnTuZNm0a0dHRJCYmkpOTw5o1a9i0aROXXnopBQUFNDU18Z3vfIdbbrkFODytRF1dHRdccAGnn346S5cuJTc3l1deeYW4uLhuXlkpdTSavH6avQGS46KoafSxpagGf8CQEBvFpGHJRLtd+PwBlmwtZfPBGjYeqGHpzjJqmnxHbGtqXgqNXj/biuuIi3bT6PUT7RYmDUvh5TX7+eeKAlwCX58zhqHJHrYW13Jyfhqzx2ayeGMxK/dUcOXJI5g1JqPTeq8+dURf7o4jDLrQ/8V/NrLpQE2vbnPSsGR+/oXJXa7z29/+lg0bNrBmzRqWLFnChRdeyIYNG1qHVj722GOkp6fT2NjIySefzGWXXUZGRttf9Pbt23nuued4+OGHueKKK3jxxRe59tpre/W9KBVumrx+Ptxexoc7ythZWsfUvFROG5vBiSPS8ETbv7KrG738d0sxb2wo4r1tpTR5A0S7Ba+/7dTxI9Lj+cqskbywspAtRbUADE+P44Ljc5g+IpW6Zh/NvgDD0+Mpr2vmuU/34fMbHrruJM6ZlE1lg5e4aDdxMW5Ka5t5Zc1+po9I46SRaUfUfd3MkVw3c2Tf76CjNOhCf6A45ZRT2oyl/8tf/sJLL70EQEFBAdu3bz8i9EeNGsW0afba2yeddBJ79uzpt3qVGiiMMSzdWU6zz8/ssZnERrlp8vqJcglul7CtuI63NxdT3eilrK6ZtzYVU9vkwxPtIj8jgQfe28nf3t1BbJSLMVmJNHn9FFQ24PUbspNjuXLGcIanx1Na10xqXAwTc5KIi3ZTVNPEg+/t4u7XNpObGsffrp7OWROGEB/TeQx+dXbb82XSE2Jab2clxXLzGaP7bD/1lUEX+t21yPtLQkJC6+0lS5bw9ttvs2zZMuLj45kzZ06HY+1jY2Nbb7vdbhobG/ulVqX6Q0V9CxX1LVQ3eqlp8uL1BchO9pAQG0VxTRP7qxo5WNXE6xsOtrayk2KjSPJEcaC6CRFI9kRT3egFIC7aTXyMm3MmZnPp9FxOHZ1ObJSb2iYvn+6u4KMd5ewprychNorzjh/KuZOymZqXisvV+bDnL0wZxoYD1YwbkkRcTOfH4sLZoAv9UElKSqK2trbDx6qrq0lLSyM+Pp4tW7bw8ccf93N1SvU9nz/A8j2VLNlWgtdnSI6Lwi1CXYuP97aWtgZ5dyYMTeKeL08lIzGGxRuKaPYFyM9IwG8MpbXNTBqWzPmTh5KVFNvh85M80cydmM3cidlH/R5cLmFKXmSPpNPQ76GMjAxmz57N8ccfT1xcHNnZh//DnX/++Tz44INMmTKF8ePHM3PmzBBWqlTPfLC9lEXrizhtTAanj82k0esnYAxDkz1UNXp5Z3MxRdXNxMW42Hywlv9uKaG60UuM20W0W6h3Rqm4BGaMTOeOCyYwLDWOZE8UyXHRRLmE4ppm6pt9ZCd7GJbqYWiKh9iowy3sM8f3/WgV1daAu0bujBkzTPuLqGzevJmJEyeGqKL+F2nvV/WemiYvK/dWsr6wmok5ycydMOSI7o7dZfU8sGQHC1YUdniw0+0SjDEEghanxUdz1oRszpk0hDPGZZEQG4U/YDDG4HaJnkk+AIjISmPMjO7W05a+UoPQ7rJ6VuypwB8wRLtdpCVE8/62Mv65vIBGr791veOyExmTlUizL0CLL0BZXTNbimpxu4SvzxnDrWeNZW1BNesKq0iOszO7FlY2EON2c/akIYzPTqLR6yc+Jgp3uy8Pe1/DfrDR0Feqnxyosgfuh6V2f25GXbOPfeUNjB+a1Bq2zT4/6wureX55Af9eVdimJQ4Q5RIumZbLZSfmcnxeCv/dXMKTy/awo6SO2GgXMW4XmYmx/GheLhdNGdZax6wxGV2OI09y62wt4URDX6l+sHJvBV99fDn+gOGPV07j3MltT7Vfta+SBcsL2F/VSGltM9uKawkYyE2N45xJ2a3ztDT7AsRGubhx9iiuOnUE8TFumr0ByutbyEuLIzvZ07rNS6fncun03P5+q2qA09BXqpe1+AJUN3rJSorFHzC8uu4Ad7y4nqEpHpI8Udzy1Eqmj0jFGAgYQ12Tj11l9STFRjFmSCLDUuM4d/JQ8lLjeGn1fv6xbA8Tc5K55tSRnDo6nVNHpZMaH9PmNfMzEzouRql2NPSVOkqBgGFvRQNDkz24XcI/VxTw6toD5KR4iHK7eHtzMVUNXkZmxOMPGAorG5k8LJknvnoKSZ4o/m/xVrYU1eB2uYhyCUOTPVx/Wj6Xn5RHQmzbj+QVJw/HHzBH9Kcr9Vn1KPRF5Hzgz4AbeMQY89t2j48EHgOygArgWmNMofPY9cBPnFXvNsY82Uu1K9Vvmrx+PtpRxtubS3hnczEltc24XUKSJ4qqBi/jhiRSWNlITZOXuROGMDEnmeV7KmjyBvjJhRM5Z9LQ1uD+6UWTjuq1NfBVb+o29EXEDdwHnAMUAstFZKExZlPQavcA/zDGPCkiZwG/Aa4TkXTg58AMwAArnedW9vYbGWgSExOpq6sLdRnqM6isb+G+d3dQVNPE8PR4thfX8eEOO59LQoybz4/PYvbYTIqrm9hT3sAXT8xlznFZRwxb/J/PjwnRO1Cqcz1p6Z8C7DDG7AIQkeeBS4Dg0J8E3O7cfhd42bl9HvCWMabCee5bwPnAc8deulJHJxAwuFyCP2DYXVZHUXUzmUkxVNS1sHDtAfZVNJCWEMOH28uoa/YxLNXD6xuKGJrs4YoZwzl7YnbrVABKDVY9Cf1coCDofiFwart11gKXYbuAvggkiUhGJ889YjiBiNwC3AIwYkT/TjPaUz/84Q8ZOXJk63z6d911FyLC+++/T2VlJV6vl7vvvptLLrkkxJUqsCcpLd5QRJMvQLPXz9ubi/l0dwVRLheIPdgaLCHGzfihSWzcX830EancecFExg9Nwh8wuEQvY6nCR09Cv6P/7e1P4/0+8DcRuQF4H9gP+Hr4XIwxDwEPgT0jt8tqXr8DitZ3W/RRGXoCXPDbLleZP38+t912W2voL1iwgDfeeIPbb7+d5ORkysrKmDlzJhdffLEGRAj4A4YXVxWyu6yeiroWXlt/kLrmw/Ojj8lK4GtnjEZE8AcCjB+aTG5qHBX1LbhdwuePy+pwAi7tT1fhpiehXwgMD7qfBxwIXsEYcwD4EoCIJAKXGWOqRaQQmNPuuUuOod6QmT59OiUlJRw4cIDS0lLS0tLIycnh9ttv5/3338flcrF//36Ki4sZOrRvL3cWaQorG1i6s5wWXwCfP4DXb0ezJMdFkxIXTbRb+Ms721m1r4oolxAf4+asCUO48fRRDEv1gLHT4OqXsVI9C/3lwDgRGYVtwc8Hrg5eQUQygQpjTAC4EzuSB2Ax8GsROXSFgXOdxz+7blrkfenyyy/nhRdeoKioiPnz5/PMM89QWlrKypUriY6OJj8/v8MpldVnU1nfwp/f2c4zn+w9Yn6Y9lLiovnTldO4ZNowDXelutBt6BtjfCLyLWyAu4HHjDEbReSXwApjzEJsa/43ImKw3TvfdJ5bISK/wn5xAPzy0EHdwWj+/Pl87Wtfo6ysjPfee48FCxYwZMgQoqOjeffdd9m7d2+oSxy0qhu97K9spKK+hdT4aPaU13PXwo1UNni5YkYeN84e5bTqXUS5BZ/fUNvko6bJS02jlwk5yW0ucKGU6liPxukbYxYBi9ot+1nQ7ReAFzp57mMcbvkPapMnT6a2tpbc3FxycnK45ppr+MIXvsCMGTOYNm0aEyZMCHWJg0aT18+mgzWs3FPJ4o1FrNxXSfsJX4/PTeapm05lYk5yh9tI05BX6qjpGblHaf36wweRMzMzWbZsWYfrRfoY/d1l9ewtr2fm6AzWFVbzy1c3sru0npgoF03eQJuZICcMTeLbZ43juOwkMhJjqGrw4g8Yzp2cTbRO9qVUr9LQV73un8v38dNXNtLiC+CJtiGfmxrHlSePwOu3y5I90YzLTmTa8DSGpni636hS4cAYqNwDVfsAA0MmQ2JWv5agoa+OiTGGjQdqeHNTMSv3VlBY2cje8gZmj83gq6eN4oPtpWQkxnLzGaO6vAC1ChNFG2DVk3D67ZA8rO9ex++FonXg98GI9qcNdcEYqC+FhCzo7IC/MbD+BSjbCiffDEkdjMarLoSSLVB7ADLHQ97J0FgBez6wgV5XAs214G2AlgZoqYOmKvu8hvLD20kYAt/8BOLTobESojwQ3f3U28di0HwKjTERMSpjoF3JrD2fP8Dawmp2lNSyfn8172wu4WB1Ey6B43NTOCE3hetn5XP9afm4XcLZk47+OqZqAKvaB5sWQnMNuGMgPgOSciApG8p3wsJvg7ceNr0CVz4Nw0+xz6srgQNrYOjxEJ8JDWU2fOtLIToBMsYcGcTGQNVeSBkOLuccikAAPrwXPrjXvg7A+Avh3F9B+ujDzw8EoKYQYpMhLhX2fQzv3wOFn0JTtd3m+AvABKCxCmLi7bqeFNi7FHa9a7ez7H6YdjUMmwbuWCjfATvehv1tr+6HJ9Vu99BpSNHxEJtkf8Yk2H+JQ2HoFMg9ETLGQkMFvHgTLP4xnPkjePoyyJ4MX368T351hwyK0Pd4PJSXl5ORkRHWwW+Moby8HI8n9N0dxhje21bKwrUH+HB7GekJMYzKTODT3RWU17cAEBft5oxxmXz3nOM4a8IQMhI7vpB1WPI2QXQIf08lm6GqAMad03GLtWSzDeXgIGyug11LIDYR0vLtP7Bhvfs9SB1pA7JiN1Tssv+yxsNp37Yh/9L/B9ve6Lqu3JPgrJ/Cq7fBExfBja9D9vHw9Je6P6ly5Gy44He2joJP4L3fQeFyyJ0B5/8W/M02hLe+ZoP+hMvtl9CS38JfX4OYJNtVEvDbLxmfvWgNqSPseonZMPlLdp/s+RBWPmnD3pMK3kb7Hr0Ndjvz7oExZ8F/fwWrn4LlDx+uc+gUOPsuGD7TftntXwU7/wtpo+xzMseBp+PBB0coWg8f3GP3a8APF93bs+cdg0FxjVyv10thYWFEjIH3eDzk5eURHR3dr6/b7PPzzMf7qGxoYWJOMs8vL+D9baWkxEXzueOyqGn0srO0jmnDU7ng+Bym5KUwLDVu8J+xWl8O1fucwEvr/E9+sC3PFY/B2udsGOVMhclfBF+LbeXlTLUtQleU/TB/8ne7/Pxfw+g5R26vcg9sftUGxrDpMOubtuW7awn4mkBctlUcHQdl223reNiJULETPvgDBHx2uzPtWeL4W2x4rXnGbgNs6zn7eEgcAlvfgObqw68/fKY9G33lExDwHllfYjbUFcPoM6Fmv633jO/D1Pk2SH3NtqbaYqg9aGuecJH9Mqwvg4fOtC3psXNtl88FvwfEdnMkZNqujYRM+2VUtA6W/tV2cRxqLSfn2tda+aR9HbD79pxfwcyvH/5dVe2DbYuhbJttPbvcdr9ljrW/34Nr7P6d+XXb4g7+fbb/ffud/eAO+vwF/Pa9B3z2/0lvftl7m+ChOfYL55oXIPvoZmAN1tNr5A6K0Fd9671tpdy1cCO7y+pxCQQMJMVG8d1zj+PamSMHxggaXzN8+rD9cMy5035YC1faUMo/3basfC0Q5QzjNMb+iX5gtQ2FqDhIyICcabaPdud/YevrtkVpnHl40vJtq3b0HNv3um8Z7HwXJn4BTvuW7ed98SbIPgFGf9723x5ca58b5bGhFyx1pA2gil2Qf4ZtRUfHQ1Ss7eooWmfXSx9t13FF2WDpTFTc4dbrlCttkL37a7tPgiUMgdNutd0LBZ9C6Wa7D0bPgROvt18mB1bDikdtmE29Gk6/zemHrrEt1vRR9stm5RPw2vdtWM5/FvJn9/x3dmA1PHqebaHPuBEu+mPX6zdU2N+xOwqGTLJfNtEeu3zTK7ZLJmdqvx/47HPNdfZ3EhN/TJvR0Ffd2ltez29f38LrG4oYlZnAXRdP5uT8NDYfrCU/I/6zddf4vfagVVxa9+seXAcf/ckG8Yyv2pCqLYYtr9rASB9t+4srd8P6f9lgBDj3bsg7Bf5xsdMidtsg9TbACVfApffDx/fDW86pJPEZ9guhpbbt6w89AcbPs/2o1YWw4d/t+mrFHoysOQBfehgW/whScuHmdw73MdeV2H5gVxSUbLLdKsbYL5jRZ9rW9/v/Z788fE3QUm9b4+mj7JfJhIvs7eJNthshfTQcd749sBfw2RZzSx2kj7EhXLLJ7uPcE+3rN1TYFq47GlzR9mfaqJ61RgN++5dIfHrX65Vus4GUktf9Ntvb+JLdr1/8+zGHmuqahr7qUHldM+9vL+Xl1Qd4f3spsVEubj1rHDefMYrY/Z/aFnP25J5vcOPL8NGf4arnbAv6hZtg83/s6I1pV9kQ3PaGXZaWDxf9ybZ4lz8Ky/5mD455620LGDl8cM6TarsBwC4fejzM/Tms+gdsec32S8dn2j7ggk9skLbUw8rH7ZfIwTW2//biv9gvE7AtqgOrbcDnnw6pw9u+F2Ng70e29ZuSZ7tFouPh0XOheL1tjd2yxLY2lRpgNPQVYA/IPv3xXh79cDeVDV6qG22f5dBkD1eePJyrTx1BdrwL3vmFDeGoOJj/NIw9226gdBt88oDtux71ubYbr9gFD37OtqAnXQIzbrKt76wJULrl8HrRCfaA496P7HC1Q90pU6+C835tW/JrnrMHHpOG2j7gIZNsK7SuxPYfH2q5NtfCw3Pt8Lib3rKt5GCfPASv/6+t9ZoX7F8Ax6pitw3+E6+DuT/rfn2lQkBDP0IZY9h8sJbleyqoa/axfE8FS7aWcnJ+GpNykhmS7OFz47KYPCwZl0ts98DzV9v+6xk32gOUJVtg0sW2H33r62D8tpU75077V0BdiW09f3w/lO2AKVfY0Q3xmbbv95uf2BENJZtsF8rQKfZP+4YKWPoX+yUw5QpIG/nZ3mRzre3i6KxboniT7SbpzQNufm/bg3tKDTAa+hHCGEN1XQM1Hz3Cy/Un8MzWAMU1TUyVnWw3eZjoBH5w7liuPzEdV4ITkk3VNpS9DfD2XbY749IH7BC4xip45ZtQvMF2dxx3nh1V8vYvYOO/jyzg8sdt3/RDc+xz5j8HE+b14x5QSoGGftjz+QP8e9V+Hnx7Az9u+B1z3atZEpjGM2P/wI2pq5i16n8x0fGQdzJStM6G+ZQrYPipsOQ3dmggQGwKXPWs7ePuijF2JIg7yg7la6l3xoE73SsVu+1JLdOu7nrYo1KqT/Q09AfFyVmqrV2ldXzr2dUcOLif5xP/yHHubZQNOY05JUuZc3o9LPwrZE1ERs6yZyKOn2fPNlz5OKz7pz3Z5dIH7QibtHw70qQ7Il2f7p4+6sj+daXUgKOhP9Ctf8Ge9p08jEDCEJYf9PHY6joy3En8M+tREhsKkSueJHPsXPjzVHj+Gntg9bqXYcyZbbd12q32NPL8M8A1AMbeK6X6nYb+QOX32nHmH99PgzsZj78eF35OBU51YU9abEmB6146fMLMGd+DN+6wI2/aBz7YMeYpR1yXXikVQTT0B5qCT+0Il13vQ3M1z7vmcVfT1bhcLo5PC/D1Wdl8PsePq3ofDD/ZjlI55KSv2tPYp10TuvqVUgOahn6oBPz2zNPtb9nT8XOm2gOjyx+186VMupiHyo7n9ztH8Mq3ZjN5WEq7Dcw6cpvRHjtbn1JKdUJDPxT2fASv/9Ce5elJsePYN74CzdX4TryRVeNv441t9Ty2fTffmTu2g8BXSqnPRkO/rx1YDSset6f0n3yzneRq0fft5FGXP87B3HP4/Zs7Kc2op7m2nFUfR+FfugG3SzhvcjbfPHNsqN+BUiqMaOj3Nr8PVv/DTm1bsctOseuOsRNvLX/EXo1n/Dy47FEaieVrf1/KzpJ6Jg9LJjUzh2+ckMwJuSnMHJNBskfPAFVK9S4N/d5UtB5e/rr9mZZvZ0Y8+xd2BsnN/4E3foSZdjXvT/gZlRsrWbT+IBsP1PDo9TM4a4JeYUop1fc09HuL3wcLrrfT4H75STsBWfCZqdOvxUy5kl8t2s5jT6xqXXzHBRM08JVS/UZD/1hU77d99hMuhLXP2isatZt7xhjDIx/sZkdJHcW1TSzZWsoNp+XzlVkjiY12k5vatxdBVkqpYBr6n9XBtfDMl+2Vm6ZfCzuX2OkNxl/QZrU/vr2dv7yznczEWALGcPvZx/HtuWPD+lq/SqmBS0P/syhaD49faIdbnvI/8Onf7fJL72/TpbNgeQF/eWc7V8zI43eXTdGgV0qFnIb+Z7HiMXshkJvetNMaDD/Fzmkz+vOA7dJ54L2d/P6NrZwxLpP//4snaOArpQYEDf2e8HvttT4nXWovpLH1DRh71uF5bE64HLBhv7qgigeX7OTNTcVcPHUYv798ysC4sLhSSqGh3zMfPwBv/dRepHrkaVB7AMb/tM0qxhh++OI6FqwoJMkTxf+eN55vzBmjLXyl1ICiod+dhgr44B57e+lfnYuPCIw7t81qC1YUsGBFITedPorvnnMcCbG6a5VSA4/2O3Tngz/Ya7Kee7dt4S/9q736VEJm6ypbi2r5+cKNnD42kx/Nm6iBr5QasDT0u7J3KXz6kL0E4Kxv2ZkwA942wzL3VzXy1cc/JckTzb1XTsXt0u4cpdTApaHfme1vwVNftNMpzP25HYp55o8hKg4mXQzAwepGrnvkE2qbfTzx1ZMZkuQJbc1KKdUN7YfoSNF6eP5qyJpgr0x1qCvnuPPgR/up8xr+/uZWHvlgNwBP3XSKTn+slBoUetTSF5HzRWSriOwQkTs6eHyEiLwrIqtFZJ2IzHOWR4vIkyKyXkQ2i8idvf0Gep2vGf79P/ai4de93KbvHuCdrWWce+97/PW/Ozh7UjZv3HYGM/LTQ1SsUkodnW5b+iLiBu4DzgEKgeUistAYsylotZ8AC4wxD4jIJGARkA98GYg1xpwgIvHAJhF5zhizp5ffR+9599dQshGuXgAJGa2LjTH84c1t/O3dHRyXnciLV5/GSSPTQlioUkodvZ5075wC7DDG7AIQkeeBS4Dg0DdAsnM7BTgQtDxBRKKAOKAFqOmFuvtG6TY7Omf6tbYrx2GM4a6FG3ly2V7mnzycX15yPDFRejhEKTX49CS5coFv1NNPAAAWVElEQVSCoPuFzrJgdwHXikghtpV/q7P8BaAeOAjsA+4xxlS0fwERuUVEVojIitLS0qN7B73pnV9AdLydAz/IovVFPLlsLzefPorffOkEDXyl1KDVk/TqaAyiaXf/KuAJY0weMA94SkRc2L8S/MAwYBTwPREZfcTGjHnIGDPDGDMjKyvrqN5Ar9n3sb1Q+ezvtOnHN8bw0Ps7GZWZwJ3zJuoZtkqpQa0noV8IDA+6n8fh7ptDbgIWABhjlgEeIBO4GnjDGOM1xpQAHwEzjrXoXle93163NjEbZn2jzUPL91SytrCam04fpWPwlVKDXk9CfzkwTkRGiUgMMB9Y2G6dfcBcABGZiA39Umf5WWIlADOBLb1VfK/Y+jo8MAvKd8FFf4KYhDYPP/T+LtLio7nsxLwQFaiUUr2n2wO5xhifiHwLWAy4gceMMRtF5JfACmPMQuB7wMMicju26+cGY4wRkfuAx4EN2G6ix40x6/rqzRy1gB8W3gopw+GKf0DGmNaHlu4o4/Gle3h7czHfPmsscTHuEBaqlFK9o0cnZxljFmEP0AYv+1nQ7U3A7A6eV4cdtjkwFXxiJ1C74HdtAn/J1hJueHw5mYkxfH3OGL5x5tgQFqmUUr0nss/I3fwquGNg7Dmti0prm/n+v9YyPjuJl785W1v4SqmwErmhbwxs+Q+MngOeZGeRnRO/psnHMzfP1MBXSoWdyBxwboydX6dqH0y4qHXxe9tK+e+WEn5w3njGD00KYYFKKdU3Iq+l/+ZPYdWTkJwL4oLx8wAIBAy/f2Mrw9Pj+Mqs/NDWqJRSfSSyWvrGwLoFEJsCtQdh7NmQaE8Ge3X9QTYdrOF754zXM26VUmErslr6ReugrggufQCmXGlb+kCT1889i7cyYWgSF08dFuIilVKq70RWk3bbm/bn2HPA5bYXRsGegLWvooEfXzgRl551q5QKY5EV+tsXw7ATW7t0AAoqGrjv3R1ceEIOZ4wL0bw/SinVTyIn9OvLoXBFmymTAe5+bRNul/CTiyaGqDCllOo/kRP6O94GDIw7fCLW9uJaFm8s5pbPjSYnJS50tSmlVD+JjNCvLoS3fw6pIyFneuvihz/YhSfapUM0lVIRI/xDv7EKnvkytNTDVc+By77lkpomXl59gCtmDCc9ISbERSqlVP8I/yGbKx6Dkk3wlVcge3Lr4ieW7sEXCHDz6Udc00UppcJW+Lf0S7fYs29Hz2ld5A8YXlhZyFkTshmRER+y0pRSqr+Ff+iXbYeMtlMjL99TQUltMxdP0xOxlFKRJbxD3xgo3wGZ49osfm3dQTzRLuZOGBKiwpRSKjTCO/TrSqC5BjIOh77PH+D1DQeZOyGbhNjwP6ShlFLBwjv0y7fbn5mHu3c+2V1BWV0LF03JCVFRSikVOmEe+jvsz6CW/qL1B4mPcTNnvHbtKKUiT3iHftl2iPLYC587PtxRxmljMvWqWEqpiBTeoV++A9LHtJ6Qtb+qkb3lDZw2JiPEhSmlVGiEd+iXbW/Tn79sZzkAp43V0FdKRabwDX1fC1TuadOfv3RnGRkJMRw3RK9/q5SKTOEb+lV7wfhbx+gbY1i2s5yZozP0QilKqYgVvqFf5gzXdM7G3VPewMHqJmZpf75SKoKFb+hX7rY/0+2Eakt3lgHoQVylVEQL39CvKoCYRIhLA2DpznKGJnsYlZkQ4sKUUip0wjf0qwsgJQ9EMMbw8c5yThuTgYj25yulIleYh749KWtbcR3l9S3M1K4dpVSEC9/QryqAVBv62p+vlFJWeIZ+Sz00VrS29JfuLGdEejx5aXrBFKVUZAvP0K8qsD9TR+APGD7eVa6tfKWUIlxDv9oJ/ZThbDxQTW2TT8fnK6UU4Rr6Vfvsz5Q8Pt1dAcCs0Rr6SinVo9AXkfNFZKuI7BCROzp4fISIvCsiq0VknYjMC3psiogsE5GNIrJeRDy9+QY6VF0ArihIGsq24loyE2MYktz3L6uUUgNdt9cLFBE3cB9wDlAILBeRhcaYTUGr/QRYYIx5QEQmAYuAfBGJAp4GrjPGrBWRDMDb6++ivepCSM4Fl5tdpfWMzkzs85dUSqnBoCct/VOAHcaYXcaYFuB54JJ26xgg2bmdAhxwbp8LrDPGrAUwxpQbY/zHXnY3qgogdQQAu8rqGTNEz8JVSinoWejnAgVB9wudZcHuAq4VkUJsK/9WZ/lxgBGRxSKySkR+0NELiMgtIrJCRFaUlpYe1RvokHNiVmV9CxX1LdrSV0opR09Cv6N5C0y7+1cBTxhj8oB5wFMi4sJ2H50OXOP8/KKIzD1iY8Y8ZIyZYYyZkZWVdVRv4Ah+L9QehNTh7CqrA2B0lrb0lVIKehb6hcDwoPt5HO6+OeQmYAGAMWYZ4AEynee+Z4wpM8Y0YP8KOPFYi+5SzX4wAUjJY2dpPQBjsrSlr5RS0LPQXw6ME5FRIhIDzAcWtltnHzAXQEQmYkO/FFgMTBGReOeg7ueBTfSl6kL7M2U4O0vriHYLeWlxffqSSik1WHQ7escY4xORb2ED3A08ZozZKCK/BFYYYxYC3wMeFpHbsV0/NxhjDFApIvdivzgMsMgY81pfvRkA6ortz6Sh7CqtJz8jgSh3eJ6OoJRSR6vb0AcwxizCds0EL/tZ0O1NwOxOnvs0dthm/2iwJ2MRn8mu0mLGDtGuHaWUOiT8msAN5QB4Y1PYV9HAaO3PV0qpVuEZ+p5UCqpa8PqNHsRVSqkg4Rn68Rnsckbu6HBNpZQ6LExDP539VY0AjEjXOfSVUuqQMAz9CojPoLS2GbdLSI+PCXVFSik1YIRt6JfUNpGZGIPLpRdCV0qpQ8Iw9G33TmltM1lJsaGuRimlBpTwCv2WBvA12u6dumayEjX0lVIqWHiFvjNG/1Cfvrb0lVKqrbAM/YAnjbK6Fg19pZRqJyxDv9aVjD9gtHtHKaXaCa/Qb6wEoNwkAeh1cZVSqp3wCn2npV/ktWfhaveOUkq1FYahLxxssS187d5RSqm2wi/049IorfcB2tJXSqn2wi/0neGa8TFuEmJ7dLkApZSKGGEY+no2rlJKdSbMQv/wZGvan6+UUkcKw9BPt1MwaEtfKaWOED6hb0xrn35JTZOGvlJKdSB8Qr+lHvzNeGPTqGnyMURDXymljhA+od86BUMKoMM1lVKqI2EX+pXYC6Fr6Cul1JHCJ/RTR8KXHuFA/AQA0hM09JVSqr3wCf2EDJjyZWqjswDwRIfPW1NKqd4SdsnY7PMDEBvlDnElSik18IRd6Lf4AgDERIXdW1NKqWMWdsnY7IR+rIa+UkodIeySUVv6SinVubBLRm3pK6VU58IuGQ+Ffow77N6aUkods7BLxmafn5goFyIS6lKUUmrACbvQb/EFiNVWvlJKdSjs0rHZFyBWT8xSSqkO9SgdReR8EdkqIjtE5I4OHh8hIu+KyGoRWSci8zp4vE5Evt9bhXemxRfQ/nyllOpEt+koIm7gPuACYBJwlYhMarfaT4AFxpjpwHzg/naP/xF4/djL7V6LL0BstJ6Nq5RSHelJk/gUYIcxZpcxpgV4Hrik3ToGSHZupwAHDj0gIpcCu4CNx15u95p9fm3pK6VUJ3qSjrlAQdD9QmdZsLuAa0WkEFgE3AogIgnAD4FfdPUCInKLiKwQkRWlpaU9LL1jLdqnr5RSnepJOnY09tG0u38V8IQxJg+YBzwlIi5s2P/RGFPX1QsYYx4yxswwxszIysrqSd2datY+faWU6lRUD9YpBIYH3c8jqPvGcRNwPoAxZpmIeIBM4FTgchH5PZAKBESkyRjzt2OuvBMtvoBOwaCUUp3oSegvB8aJyChgP/ZA7dXt1tkHzAWeEJGJgAcoNcaccWgFEbkLqOvLwAfb0k/y9ORtKaVU5Om2SWyM8QHfAhYDm7GjdDaKyC9F5GJnte8BXxORtcBzwA3GmPZdQP1CW/pKKdW5HjWJjTGLsAdog5f9LOj2JmB2N9u46zPUd9SafX69gIpSSnUi7JrE2tJXSqnOhV06NvsCOq2yUkp1IuzSUVv6SinVubBLR9vS1z59pZTqSFiFvjGGFr+29JVSqjNhlY56qUSllOpaWKVji19DXymluhJW6diiLX2llOpSWKVj60XRNfSVUqpDYZWOh1v6OnpHKaU6Elah3+zzA9rSV0qpzoRVOmqfvlJKdS2s0lH79JVSqmthlY7ap6+UUl0Lq9DXPn2llOpaWKWj9ukrpVTXwiodtU9fKaW6FlbpqHPvKKVU18IqHbWlr5RSXQurdNTRO0op1bWwCv1Do3e0e0cppToWVul4qKUf4w6rt6WUUr0mrNKxxRcg2i24XBLqUpRSakAKq9DX6+MqpVTXwir0W3x6fVyllOpKWCVks8+vB3GVUqoLYZWQ2tJXSqmuhVVC2j79sHpLSinVq8IqIbWlr5RSXQurhNTRO0op1bWwCv0WX0BPzFJKqS6EVUI2+/zERofVW1JKqV4VVgnZrC19pZTqUlglZIsvQGy09ukrpVRnehT6InK+iGwVkR0ickcHj48QkXdFZLWIrBORec7yc0RkpYisd36e1dtvIJi29JVSqmtR3a0gIm7gPuAcoBBYLiILjTGbglb7CbDAGPOAiEwCFgH5QBnwBWPMARE5HlgM5Pbye2jVrEM2lVKqSz1JyFOAHcaYXcaYFuB54JJ26xgg2bmdAhwAMMasNsYccJZvBDwiEnvsZXesRadhUEqpLvUkIXOBgqD7hRzZWr8LuFZECrGt/Fs72M5lwGpjTHP7B0TkFhFZISIrSktLe1R4R1r8ekauUkp1pScJ2dHk9Kbd/auAJ4wxecA84CkRad22iEwGfgf8T0cvYIx5yBgzwxgzIysrq2eVH7kNnYZBKaW60ZOELASGB93Pw+m+CXITsADAGLMM8ACZACKSB7wEfMUYs/NYC+6ML2AwRi+KrpRSXelJQi4HxonIKBGJAeYDC9utsw+YCyAiE7GhXyoiqcBrwJ3GmI96r+wjNetF0ZVSqlvdhr4xxgd8CzvyZjN2lM5GEfmliFzsrPY94GsishZ4DrjBGGOc540Ffioia5x/Q/rijbReH1db+kop1aluh2wCGGMWYQ/QBi/7WdDtTcDsDp53N3D3MdbYI80+P4D26SulVBfCJiG1pa+UUt0Lm4TUPn2llOpe2IS+tvSVUqp7YZOQCbFRXHhCDjkpnlCXopRSA1aPDuQOBqMyE7jvmhNDXYZSSg1oYdPSV0op1T0NfaWUiiAa+kopFUE09JVSKoJo6CulVATR0FdKqQiioa+UUhFEQ18ppSKI2BmQBw4RKQX2HsMmMrEXZB9otK6jM1DrgoFbm9Z19AZqbZ+lrpHGmG4vPTjgQv9YicgKY8yMUNfRntZ1dAZqXTBwa9O6jt5Ara0v69LuHaWUiiAa+kopFUHCMfQfCnUBndC6js5ArQsGbm1a19EbqLX1WV1h16evlFKqc+HY0ldKKdUJDX2llIogYRP6InK+iGwVkR0ickcI6xguIu+KyGYR2Sgi33GWp4vIWyKy3fmZFqL63CKyWkRede6PEpFPnLr+KSIxIaorVUReEJEtzr6bNRD2mYjc7vweN4jIcyLiCdU+E5HHRKRERDYELetwH4n1F+fzsE5E+uwKQ53U9X/O73KdiLwkIqlBj93p1LVVRM7rz7qCHvu+iBgRyXTuh3R/OctvdfbJRhH5fdDy3t1fxphB/w9wAzuB0UAMsBaYFKJacoATndtJwDZgEvB74A5n+R3A70JU33eBZ4FXnfsLgPnO7QeBr4eorieBm53bMUBqqPcZkAvsBuKC9tUNodpnwOeAE4ENQcs63EfAPOB1QICZwCf9XNe5QJRz+3dBdU1yPp+xwCjnc+vur7qc5cOBxdiTQDMHyP46E3gbiHXuD+mr/dXn/1H74x8wC1gcdP9O4M5Q1+XU8gpwDrAVyHGW5QBbQ1BLHvAOcBbwqvMfvCzow9lmP/ZjXclOuEq75SHdZ07oFwDp2EuLvgqcF8p9BuS3C4sO9xHwd+Cqjtbrj7raPfZF4BnndpvPphO+s/qzLuAFYCqwJyj0Q7q/sA2JsztYr9f3V7h07xz6cB5S6CwLKRHJB6YDnwDZxpiDAM7PISEo6U/AD4CAcz8DqDLG+Jz7odpvo4FS4HGn6+kREUkgxPvMGLMfuAfYBxwEqoGVDIx9dkhn+2ggfSZuxLaiIcR1icjFwH5jzNp2D4V6fx0HnOF0G74nIif3VV3hEvrSwbKQjkUVkUTgReA2Y0xNKGtx6rkIKDHGrAxe3MGqodhvUdg/dx8wxkwH6rFdFSHl9I9fgv2zehiQAFzQwaoDcdzzgPjdisiPAR/wzKFFHazWL3WJSDzwY+BnHT3cwbL+3F9RQBq2a+l/gQUiIn1RV7iEfiG2n+6QPOBAiGpBRKKxgf+MMebfzuJiEclxHs8BSvq5rNnAxSKyB3ge28XzJyBVRKKcdUK13wqBQmPMJ879F7BfAqHeZ2cDu40xpcYYL/Bv4DQGxj47pLN9FPLPhIhcD1wEXGOcvokQ1zUG+wW+1vkc5AGrRGRoiOvCef1/G+tT7F/jmX1RV7iE/nJgnDOqIgaYDywMRSHOt/OjwGZjzL1BDy0ErnduX4/t6+83xpg7jTF5xph87P75rzHmGuBd4PJQ1eXUVgQUiMh4Z9FcYBMh3mfYbp2ZIhLv/F4P1RXyfRaks320EPiKMyplJlB9qBuoP4jI+cAPgYuNMQ3t6p0vIrEiMgoYB3zaHzUZY9YbY4YYY/Kdz0EhdtBFESHeX8DL2IYYInIcdjBDGX2xv/rqQEV//8Mefd+GPbr94xDWcTr2z691wBrn3zxs//k7wHbnZ3oIa5zD4dE7o53/RDuAf+GMHghBTdOAFc5+exn7p27I9xnwC2ALsAF4CjuKIiT7DHgOe2zBiw2smzrbR9hugfucz8N6YEY/17UD2xd96DPwYND6P3bq2gpc0J91tXt8D4cP5IZ6f8UATzv/z1YBZ/XV/tJpGJRSKoKES/eOUkqpHtDQV0qpCKKhr5RSEURDXymlIoiGvlJKRRANfaV6kYjMEWcGU6UGIg19pZSKIBr6KiKJyLUi8qmIrBGRv4u9zkCdiPxBRFaJyDsikuWsO01EPg6aG/7QnPVjReRtEVnrPGeMs/lEOXxtgGecs3mVGhA09FXEEZGJwJXAbGPMNMAPXIOdUG2VMeZE4D3g585T/gH80BgzBXu25qHlzwD3GWOmYufkOXTa/nTgNuxc6KOx8x4pNSBEdb+KUmFnLnASsNxphMdhJyoLAP901nka+LeIpACpxpj3nOVPAv8SkSQg1xjzEoAxpgnA2d6nxphC5/4a7NzpH/b921Kqexr6KhIJ8KQx5s42C0V+2m69ruYo6arLpjnoth/9nKkBRLt3VCR6B7hcRIZA63VmR2I/D4dmz7wa+NAYUw1UisgZzvLrgPeMvUZCoYhc6mwj1pmvXakBTVsgKuIYYzaJyE+AN0XEhZ3t8JvYi7dMFpGV2KtkXek85XrgQSfUdwFfdZZfB/xdRH7pbOPL/fg2lPpMdJZNpRwiUmeMSQx1HUr1Je3eUUqpCKItfaWUiiDa0ldKqQiioa+UUhFEQ18ppSKIhr5SSkUQDX2llIog/w/NsENkn1YPsAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# about this version:\n",
    "# learning rate: 0.0002\n",
    "# batchsize: 120\n",
    "# epochs: 160\n",
    "\n",
    "%matplotlib inline\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from keras.models import Sequential\n",
    "from keras.layers.core import Dense, Dropout, Activation, Flatten\n",
    "from keras.layers.convolutional import Conv1D\n",
    "from keras.layers import AveragePooling1D\n",
    "from keras.utils import np_utils\n",
    "from keras.optimizers import Adam\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import OneHotEncoder\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from contextlib import redirect_stdout\n",
    "from keras.callbacks import EarlyStopping, ModelCheckpoint\n",
    "\n",
    "\n",
    "def get_data():\n",
    "    data = pd.read_csv(\"/kaggle/input/train-cnn/p2pData.txt\",\n",
    "                       sep=\" \",\n",
    "                       header=None)\n",
    "    label = pd.read_csv(\"/kaggle/input/train-cnn/p2pLabel.txt\",\n",
    "                        sep=\" \",\n",
    "                        header=None)\n",
    "    data_columns = data.shape[1]\n",
    "\n",
    "    for i in range(0, data_columns\n",
    "                   ):  ## These three lines make sure there're no NaN columns\n",
    "        if data[i][0] != data[i][0]:\n",
    "            del data[i]\n",
    "\n",
    "    data_columns = data.shape[1]\n",
    "    data.columns = np.arange(0, data_columns)\n",
    "\n",
    "    return data, label\n",
    "\n",
    "\n",
    "data, label = get_data()\n",
    "\n",
    "scaler = StandardScaler()\n",
    "data = scaler.fit_transform(data)\n",
    "\n",
    "data = np.array(data)\n",
    "label = np.array(label)\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(data, label, test_size=0.2)\n",
    "n_samples, n_features = X_train.shape\n",
    "\n",
    "\n",
    "def reshapeData(data):\n",
    "    n_samples, n_features = data.shape\n",
    "    data = np.reshape(data, (n_samples, n_features, 1))\n",
    "    return data\n",
    "\n",
    "\n",
    "X_train = reshapeData(X_train)\n",
    "X_test = reshapeData(X_test)\n",
    "\n",
    "\n",
    "def toOneHot(label):\n",
    "    enc = OneHotEncoder()\n",
    "    enc.fit(label)\n",
    "    label = enc.transform(label).toarray()\n",
    "    return label\n",
    "\n",
    "\n",
    "y_train = toOneHot(y_train)\n",
    "y_test = toOneHot(y_test)\n",
    "\n",
    "adam = Adam(lr=0.0002, beta_1=0.9, beta_2=0.999, epsilon=1e-08, amsgrad=True)\n",
    "\n",
    "model = Sequential()\n",
    "model.add(\n",
    "    Conv1D(64,\n",
    "           kernel_size=7,\n",
    "           strides=2,\n",
    "           input_shape=(n_features, 1),\n",
    "           kernel_initializer='uniform',\n",
    "           padding='same'))\n",
    "model.add(Activation('relu'))\n",
    "model.add(Conv1D(64, kernel_size=7, strides=2, padding='same'))\n",
    "model.add(Activation('relu'))\n",
    "model.add(AveragePooling1D(pool_size=2))\n",
    "model.add(Dropout(0.2))\n",
    "\n",
    "model.add(Conv1D(128, kernel_size=7, strides=2, padding='same'))\n",
    "model.add(Activation('relu'))\n",
    "model.add(Conv1D(128, kernel_size=7, strides=2, padding='same'))\n",
    "model.add(Activation('relu'))\n",
    "model.add(AveragePooling1D(pool_size=1))\n",
    "model.add(Dropout(0.2))\n",
    "\n",
    "model.add(Flatten())\n",
    "model.add(Dense(512))\n",
    "model.add(Dense(512))\n",
    "model.add(Dense(5))\n",
    "model.add(Activation('softmax'))\n",
    "model.compile(loss='categorical_crossentropy',\n",
    "              optimizer=adam,\n",
    "              metrics=['accuracy'])\n",
    "\n",
    "with open('Model_Architecture.txt', 'w') as f:\n",
    "    with redirect_stdout(f):\n",
    "        model.summary()\n",
    "\n",
    "callbacks = [\n",
    "    EarlyStopping(monitor='val_acc',\n",
    "                  min_delta=0.00001,\n",
    "                  patience=6,\n",
    "                  verbose=0,\n",
    "                  mode='max',\n",
    "                  restore_best_weights=False),\n",
    "    ModelCheckpoint(filepath='./best_model.h5',\n",
    "                    monitor='val_acc',\n",
    "                    mode=\"max\",\n",
    "                    save_weights_only=False,\n",
    "                    save_best_only=True)\n",
    "]\n",
    "\n",
    "history = model.fit(X_train,\n",
    "                    y_train,\n",
    "                    batch_size=120,\n",
    "                    epochs=160,\n",
    "                    verbose=0,\n",
    "                    validation_split=0.3,\n",
    "                    callbacks=callbacks)\n",
    "\n",
    "model.save(\"./best_model.h5\")\n",
    "\n",
    "training_score, training_accuracy = model.evaluate(X_train, y_train, verbose=0)\n",
    "test_score, test_accuracy = model.evaluate(X_test, y_test, verbose=0)\n",
    "with open('output.txt', 'w') as f:\n",
    "    with redirect_stdout(f):\n",
    "        print('Training score:', training_score)\n",
    "        print('Training accuracy:', training_accuracy)\n",
    "        print('Test score:', test_score)\n",
    "        print('Test accuracy:', test_accuracy)\n",
    "\n",
    "plt.plot(history.history['loss'], label='train')\n",
    "plt.plot(history.history['val_loss'], label='val')\n",
    "plt.xlabel(\"epoch\")\n",
    "plt.title(\"Loss\")\n",
    "plt.legend(loc=\"best\")\n",
    "plt.savefig(\"./loss.png\")\n",
    "plt.show()\n",
    "\n",
    "plt.plot(history.history['accuracy'], label='train')\n",
    "plt.plot(history.history['val_accuracy'], label='val')\n",
    "plt.xlabel(\"epoch\")\n",
    "plt.title(\"Accuracy\")\n",
    "plt.legend(loc=\"best\")\n",
    "plt.savefig(\"./accuracy.png\")\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
